---
title: HTTP 状态码
description: HTTP 状态码完整汇总，包含各种状态码的含义和使用场景
---

# HTTP 状态码汇总

HTTP 状态码用于表示 HTTP 请求的处理结果。状态码分为五个类别，每个类别都有特定的含义和使用场景。

## 1xx 信息响应

这类状态码表示请求已被接收，需要继续处理。

| 状态码 | 名称 | 含义 | 使用场景 |
|--------|------|------|----------|
| 100 | Continue | 继续 | 客户端应继续其请求 |
| 101 | Switching Protocols | 切换协议 | 服务器根据客户端的请求切换协议 |
| 102 | Processing | 处理中 | 服务器已收到并正在处理请求，但无响应可用 |

## 2xx 成功响应

这类状态码表示请求已成功被服务器接收、理解、并接受。

| 状态码 | 名称 | 含义 | 使用场景 |
|--------|------|------|----------|
| 200 | OK | 成功 | 请求成功，常用于 GET、POST 请求 |
| 201 | Created | 已创建 | 请求成功并创建了新资源，常用于 POST、PUT 请求 |
| 202 | Accepted | 已接受 | 请求已接受但尚未处理完成，用于异步处理 |
| 204 | No Content | 无内容 | 请求成功但无返回内容，常用于 DELETE 请求 |
| 206 | Partial Content | 部分内容 | 服务器成功处理了部分 GET 请求，用于断点续传 |

## 3xx 重定向

这类状态码表示需要客户端采取进一步的操作才能完成请求。

| 状态码 | 名称 | 含义 | 使用场景 |
|--------|------|------|----------|
| 301 | Moved Permanently | 永久重定向 | 资源已永久移动到新位置，搜索引擎会更新索引 |
| 302 | Found | 临时重定向 | 资源临时移动，原 URL 仍然有效 |
| 304 | Not Modified | 未修改 | 资源未修改，客户端可使用缓存版本 |
| 307 | Temporary Redirect | 临时重定向 | 与 302 类似，但要求保持原有的请求方法 |
| 308 | Permanent Redirect | 永久重定向 | 与 301 类似，但要求保持原有的请求方法 |

## 4xx 客户端错误

这类状态码表示客户端似乎有错误。

| 状态码 | 名称 | 含义 | 使用场景 |
|--------|------|------|----------|
| 400 | Bad Request | 错误请求 | 请求语法错误或参数无效 |
| 401 | Unauthorized | 未授权 | 需要身份验证，用户未登录或 token 无效 |
| 403 | Forbidden | 禁止访问 | 服务器理解请求但拒绝执行，权限不足 |
| 404 | Not Found | 未找到 | 请求的资源不存在 |
| 405 | Method Not Allowed | 方法不允许 | 请求方法不被允许，如对只读资源使用 POST |
| 409 | Conflict | 冲突 | 请求与服务器当前状态冲突，如重复创建资源 |
| 410 | Gone | 已删除 | 资源已被永久删除，与 404 不同的是明确表示资源曾经存在 |
| 422 | Unprocessable Entity | 无法处理的实体 | 请求格式正确但语义错误，常用于表单验证失败 |
| 429 | Too Many Requests | 请求过多 | 客户端发送的请求过多，触发限流 |

## 5xx 服务器错误

这类状态码表示服务器在处理请求的过程中发生了错误。

| 状态码 | 名称 | 含义 | 使用场景 |
|--------|------|------|----------|
| 500 | Internal Server Error | 内部服务器错误 | 服务器遇到意外情况，无法完成请求 |
| 501 | Not Implemented | 未实现 | 服务器不支持请求的功能 |
| 502 | Bad Gateway | 错误网关 | 网关或代理服务器从上游服务器收到无效响应 |
| 503 | Service Unavailable | 服务不可用 | 服务器暂时过载或维护，无法处理请求 |
| 504 | Gateway Timeout | 网关超时 | 网关或代理服务器等待上游服务器响应超时 |

## 状态码选择指南

### 成功场景
- **GET 请求成功**：使用 `200 OK`
- **创建资源成功**：使用 `201 Created`
- **删除成功**：使用 `204 No Content`
- **更新成功**：使用 `200 OK` 或 `204 No Content`

### 客户端错误场景
- **参数验证失败**：使用 `400 Bad Request` 或 `422 Unprocessable Entity`
- **未登录**：使用 `401 Unauthorized`
- **权限不足**：使用 `403 Forbidden`
- **资源不存在**：使用 `404 Not Found`
- **请求方法错误**：使用 `405 Method Not Allowed`
- **资源冲突**：使用 `409 Conflict`
- **请求频率限制**：使用 `429 Too Many Requests`

### 服务器错误场景
- **程序异常**：使用 `500 Internal Server Error`
- **功能未实现**：使用 `501 Not Implemented`
- **服务维护**：使用 `503 Service Unavailable`
- **上游服务超时**：使用 `504 Gateway Timeout`

### 重定向场景
- **URL 永久变更**：使用 `301 Moved Permanently`
- **临时跳转**：使用 `302 Found`
- **资源未修改**：使用 `304 Not Modified`（配合缓存使用）

## 最佳实践

1. **语义化使用**：选择最符合实际情况的状态码
2. **一致性**：在同一个 API 中保持状态码使用的一致性
3. **文档化**：在 API 文档中明确说明各种状态码的含义
4. **错误信息**：4xx 和 5xx 状态码应该配合详细的错误信息
5. **缓存考虑**：合理使用 304 状态码来优化缓存策略

